package com.sduonline.isdapp.util;

import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.sduonline.isdapp.model.Article;

/**
 * 自己写的，报错，不能用
 * 
 * @author 沧
 * 
 * @param <T>
 */
public class QueryUtil<T> {

	public static <T> void Trans(ResultSet rs, T t) throws IntrospectionException, IllegalArgumentException,
			IllegalAccessException, InvocationTargetException, SQLException {
		Class tClass = t.getClass();
		// 获得该类的所有属性
		Field[] fields = tClass.getDeclaredFields();
		for (Field field : fields) {
			PropertyDescriptor pd = new PropertyDescriptor(field.getName(), tClass);
			Class type = field.getType();
			String name = pd.getName();
			// 获得set方法
			Method method = pd.getWriteMethod();
			method.invoke(t, new Object[] { getClassTypeValue(type, rs.getString(name)) });
			// // 获得get方法
			// Method get = pd.getReadMethod();
			// Object getValue = get.invoke(t, new Object[] {});
			// System.out.println("field:" + field.getName() + "---getValue:" +
			// getValue);
		}
	}

	/**
	 * * 通过class类型获取获取对应类型的值 * @param typeClass class类型 * @param value 值 * @return
	 * Object
	 */
	private static Object getClassTypeValue(Class typeClass, String value) {
		if (value == null) {
			return 0;
		}
		if (typeClass == int.class) {
			if (value.equals("")) {
				return 0;
			}
			return Integer.parseInt(value);
		} else if (typeClass == short.class) {
			if (value.equals("")) {
				return 0;
			}
			return Short.parseShort(value);
		} else if (typeClass == byte.class) {
			if (value.equals("")) {
				return 0;
			}
			return Byte.parseByte(value);
		} else if (typeClass == double.class) {
			if (value.equals("")) {
				return 0;
			}
			return Double.parseDouble(value);
		} else if (typeClass == boolean.class) {
			if (value.equals("")) {
				return false;
			}
			return Boolean.parseBoolean(value);
		} else if (typeClass == float.class) {
			if (value.equals("")) {
				return 0;
			}
			return Float.parseFloat(value);
		} else if (typeClass == long.class) {
			if (value.equals("")) {
				return 0;
			}
			return Long.parseLong(value);
		} else {
			return typeClass.cast(value);
		}
	}

	public static void main(String[] args) throws Exception {
		ResultSet rs = null;
		Article a = new Article();
		new QueryUtil<Article>();
		QueryUtil.Trans(rs, a);
	}
}
